package com.hzz.web.boss.river;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.hzz.api.river.IDrainOutletService;
import com.hzz.dto.river.DrainOutletDto;
import com.hzz.framework.PageUtil;
import com.hzz.framework.Response;
import com.hzz.framework.annotation.ALogOperation;
import com.hzz.framework.annotation.RfUser2Bean;
import com.hzz.framework.annotation.auth.Logical;
import com.hzz.framework.annotation.auth.RequiresPermissions;
import com.hzz.framework.util.CommonConstant;
import com.hzz.framework.web.controller.BaseController;

import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;

@Api(description = "排污口信息")
@RestController
@Slf4j
public class DrainOutletController extends BaseController {
    @Autowired
    IDrainOutletService drainOutletService;
	static final String acPrefix = "/boss/river/drainOutlet/";

    @RequiresPermissions("drainOutlet:menu")
    @RequestMapping(method = {RequestMethod.GET, RequestMethod.POST}, value = acPrefix + "page/{pageNum}")
    // @ApiOperation(value = "信息分页(未删除)")
    public Response page(@ModelAttribute  DrainOutletDto dto, @PathVariable("pageNum") Integer pageNum) {
       log.info("page.........");
       Response result = new Response();
       try {
          if (dto == null) {
              dto = new DrainOutletDto(){{ setPageSize(CommonConstant.PAGEROW_DEFAULT_COUNT); }};
          }
          dto.setPageNum(pageNum);
          dto.setDelFlag(0);
          result.data = PageUtil.copy(drainOutletService.findDataIsPage(dto));
       } catch (Exception e) {
          result = Response.error(e.getMessage());
       }
       return result;
    }



    @RequiresPermissions("drainOutlet:info")
    @RequestMapping(method = {RequestMethod.GET, RequestMethod.POST}, value = acPrefix + "info/{id}")
    // @ApiOperation(value = "信息详情")
    public Response info(@PathVariable("id") Long id) {
       log.info("info.........");
       Response result = new Response();
       try {
          DrainOutletDto dto = new DrainOutletDto(){{
             setId(id);
            setDelFlag(0);
          }};
          result.data = drainOutletService.findDataById(dto);
       } catch (Exception e) {
          result = Response.error(e.getMessage());
       }
       return result;
    }

    @RequiresPermissions("drainOutlet:del")
    @RequestMapping(method = RequestMethod.POST, value = acPrefix + "del/{id}")
    @ALogOperation(type = "删除", desc = "排污口信息-逻辑删除")
    // @ApiOperation(value = "逻辑删除")
    public Response del(@PathVariable("id") Long id) {
       log.info("del.........");
       Response result = new Response(0,"success");
       try {
          DrainOutletDto dto = new DrainOutletDto(){{
             setId(id);
          }};
          result.message = drainOutletService.deleteDataById(dto);
       } catch (Exception e) {
          result = Response.error(e.getMessage());
       }
       return result;
    }

    @RequiresPermissions(value = {"drainOutlet:add", "drainOutlet:edit"}, logical = Logical.OR)
    @RequestMapping(method = {RequestMethod.POST,RequestMethod.PUT}, value = acPrefix + "save")
    @RfUser2Bean
    @ALogOperation(type = "修改", desc = "排污口信息")
    // @ApiOperation(value = "信息保存")
    public Response save(@Validated @ModelAttribute DrainOutletDto dto, BindingResult bindingResult) {
       log.info("save.........");
       Response result = new Response(0,"success");
       try {
          //if ("1".equals(request.getSession().getAttribute(acPrefix + "save." + dto.getToken()))) {
          //    throw new RuntimeException("请不要重复提交!");
          //}
          if (bindingResult.hasErrors()) {
             String errorMsg = "";
             List<ObjectError> errorList = bindingResult.getAllErrors();
             for (ObjectError error : errorList) {
                errorMsg += (error.getDefaultMessage()) + ";";
             }
             result = Response.error(errorMsg);
          } else {
             result = drainOutletService.saveOrUpdateData(dto);
             //request.getSession().setAttribute(acPrefix + "save." + dto.getToken(), "1");
          }
       } catch (Exception e) {
          result = Response.error(e.getMessage());
       }
       return result;
    }

	/**
	 * 根据条件查询所有信息
	 * 
	 * @param dto
	 * @return
	 */
	@RequestMapping(method = RequestMethod.GET, value = acPrefix + "list")
	public Response<List<DrainOutletDto>> list(DrainOutletDto dto) {
		log.info("list.........");
		Response<List<DrainOutletDto>> result = new Response<>();
		try {
			result.data = drainOutletService.findDataIsList(dto);
		} catch (Exception e) {
			result = Response.error(e.getMessage());
		}
		return result;
	}
}